const express = require('express');
const router = express.Router();
const Goods = require('../models/Goods');

// 统一响应格式函数
const sendResponse = (res, code = 200, message = 'success', data = null, total = null) => {
  const response = {
    code,
    message,
    data
  };
  
  // 如果提供了total参数，则添加到响应中
  if (total !== null) {
    response.total = total;
  }
  
  res.status(code).json(response);
};

// 统一错误响应函数
const sendError = (res, code = 500, message = '服务器内部错误', error = null) => {
  console.error('API错误:', error);
  res.status(code).json({
    code,
    message,
    data: null
  });
};

// ========== 商品规格管理 ==========

// 获取规格列表（包含规格值）
// 支持查询参数：?goodsId=商品ID&categoryId=分类ID（可选，不传则获取全部规格）
router.get('/', async (req, res) => {
  try {
    const { goodsId, categoryId } = req.query;
    const properties = await Goods.getAllProperties(goodsId, categoryId);
    
    sendResponse(res, 200, 'success', properties, properties.length);
  } catch (error) {
    sendError(res, 500, '获取规格列表失败', error);
  }
});

// 获取规格统计信息
router.get('/stats', async (req, res) => {
  try {
    const stats = await Goods.getPropertiesStats();
    sendResponse(res, 200, 'success', stats);
  } catch (error) {
    sendError(res, 500, '获取规格统计失败', error);
  }
});

// 创建规格（可选绑定多个商品）
router.post('/', async (req, res) => {
  try {
    // 统一入口：支持 { name, desc, is_open_checkbox, goodsIds?: number[] }
    const propertyId = await Goods.createPropertyUnified(req.body);
    sendResponse(res, 201, '规格创建成功', { property_id: propertyId });
  } catch (error) {
    if (error.message.includes('不能为空') || error.message.includes('不存在')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '创建商品规格失败', error);
    }
  }
});

// 更新商品规格
router.put('/:propertyId', async (req, res) => {
  try {
    const { propertyId } = req.params;
    const success = await Goods.updateProperty(propertyId, req.body);
    
    if (!success) {
      return sendError(res, 404, '规格不存在或更新失败');
    }
    
    sendResponse(res, 200, '规格更新成功');
  } catch (error) {
    if (error.message.includes('不存在') || error.message.includes('没有提供')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '更新商品规格失败', error);
    }
  }
});

// 删除商品规格
router.delete('/:propertyId', async (req, res) => {
  try {
    const { propertyId } = req.params;
    const success = await Goods.deleteProperty(propertyId);
    
    if (!success) {
      return sendError(res, 404, '规格不存在或删除失败');
    }
    
    sendResponse(res, 200, '规格删除成功');
  } catch (error) {
    if (error.message.includes('不存在')) {
      sendError(res, 404, error.message, error);
    } else {
      sendError(res, 500, '删除商品规格失败', error);
    }
  }
});

// ========== 规格值管理 ==========

// 创建规格值
router.post('/:propertyId/values', async (req, res) => {
  try {
    const { propertyId } = req.params;
    const valueId = await Goods.createPropertyValue(propertyId, req.body);
    sendResponse(res, 201, '规格值创建成功', { value_id: valueId });
  } catch (error) {
    if (error.message.includes('不存在') || error.message.includes('不能为空')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '创建规格值失败', error);
    }
  }
});

// 更新规格值
router.put('/values/:valueId', async (req, res) => {
  try {
    const { valueId } = req.params;
    const success = await Goods.updatePropertyValue(valueId, req.body);
    
    if (!success) {
      return sendError(res, 404, '规格值不存在或更新失败');
    }
    
    sendResponse(res, 200, '规格值更新成功');
  } catch (error) {
    if (error.message.includes('不存在') || error.message.includes('没有提供')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '更新规格值失败', error);
    }
  }
});

// 删除规格值
router.delete('/values/:valueId', async (req, res) => {
  try {
    const { valueId } = req.params;
    const success = await Goods.deletePropertyValue(valueId);
    
    if (!success) {
      return sendError(res, 404, '规格值不存在或删除失败');
    }
    
    sendResponse(res, 200, '规格值删除成功');
  } catch (error) {
    if (error.message.includes('不存在')) {
      sendError(res, 404, error.message, error);
    } else {
      sendError(res, 500, '删除规格值失败', error);
    }
  }
});

module.exports = router;
